package com.jdk.demo.nio.bilibili.Maodun.net.qiujuer2.library.clink.core.ds;

/**
 * 带优先级的节点, 可用于构成链表
 * 用于存储每一帧的数据，最后每一帧的数据可以连接起来
 * 可以实现文件的帧和字符串的帧穿插的传输，并且可以把文件的帧的优先级调低
 */
public class BytePriorityNode<Item> {
    public byte priority; // 优先级
    public Item item; // 实际要存储的数据
    public BytePriorityNode<Item> next; // 下一个节点数据

    public BytePriorityNode(Item item) {
        this.item = item;
    }

    /**
     * 按优先级追加到当前链表中
     * 添加的时候可以判断当next的优先级比要插入的节点的优先级低，则可以插队
     * @param node Node
     */
    public void appendWithPriority(BytePriorityNode<Item> node) {
        if (next == null) {
            next = node;
        } else {
            BytePriorityNode<Item> after = this.next;
            if (after.priority < node.priority) {
                // 中间位置插入
                this.next = node;
                node.next = after;
            } else {
                after.appendWithPriority(node);
            }
        }
    }
}
